/*
Copyright (C) 2008 raohmaru <http://www.raohmaru.com>

This file is part of Raohmaru AS3 Framework.

Raohmaru AS3 Framework is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

Raohmaru AS3 Framework is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License
along with Raohmaru AS3 Framework.  If not, see <http://www.gnu.org/licenses/>.
*/

package jp.raohmaru.system.gui 
{
import flash.events.Event;
import flash.display.*;

/**
 * La clase ContainerGUI añade a la aplicación un objeto Sprite que contiene un elemento de la interfaz gráfica.
 * Aunque puede ser instanciada, el objetivo de esta clase es ser heredada, actuando como una clase abstracta.
 * @author raohmaru
 * @version 1.0.2
 */
public class ContainerGUI extends Sprite implements GUI
{
	/**
	 * Objeto DisplayObject interno, contenido dentro de la instancia de ContainerGUI.
	 */
	protected var _movie :MovieClip;

	/**
	 * @inheritDoc
	 */
	public function get __movie__() : MovieClip
	{
		return _movie;
	}
	
	
	
	/**
	 * Crea una nueva instancia de ContainerGUI con el DisplayObject especificado como descendiente.
	 * El objeto de transformación del DisplayObject especificado es eliminado y aplicado al objeto ContainerGUI.
	 * @param movie Un objeto de visualización que será añadido a la lista de elementos secundarios de la instancia de ContainerGUI
	 * @see flash.display.DisplayObject#transform
	 * @example
	 * El siguiente ejemplo demuestra como un objeto ContainerGUI obtiene las propiedades de transformación del DisplayObject secundario, y como las de
	 * este último son reiniciadas.
	<listing version="3.0">
	import jp.raohmaru.system.ui.ContainerGUI;
	
	var mc :Sprite = new Sprite();
		mc.x = 100;
		mc.y = 100;		
	var shape :Shape = new Shape();
		shape.graphics.beginFill(0);
		shape.graphics.drawCircle(0, 0, 50);
		shape.graphics.endFill();
		
	mc.addChild(shape);
	addChild(mc);
	
	var cui :ContainerGUI = new ContainerGUI(mc);	
	addChild(cui);
		trace(cui.x);  // 100
	trace(mc.x);  // 0
	</listing>
	 */
	public function ContainerGUI(movie : MovieClip)
	{
		_movie = movie;
		addChild(movie);

		// Copia las propiedades de transformación
		transform = movie.transform;
		movie.transform = new Sprite().transform;
		
		addEventListener(Event.REMOVED_FROM_STAGE, onRemove);
		
		init();
	}
	
	/**
	 * @inheritDoc
	 */
	public function init() : void
	{
		
	}
	
	/**
	 * Se invoca cuando el objeto de visualización se va a eliminar de la lista de visualización, bien directamente o a través de la eliminación
	 * de un subárbol que contiene el objeto de visualización.
	 * @see flash.display.DisplayObject#removedFromStage
	 */
	protected function onRemove(e : Event) : void
	{
		removeChild(_movie);
		_movie = null;
		removeEventListener(Event.REMOVED_FROM_STAGE, onRemove);
	}
}
}